#pragma once

#include <string>

namespace raftStoreDataBase
{
    // 这是用于raft和键值对数据库之间进行快照保存的通信的结构体
    // 主要作用是将需要应用到状态机的命令或快照从 Raft 系统传递给键值数据库的状态机。
    struct ApplyMsg
    {

    public:
        ApplyMsg()
            : commandValid( false )
            , command()
            , commandIndex( -1 )
            , SnapshotValid( false )
            , Snapshot()
            , SnapshotTerm( -1 )
            , SnapshotIndex( -1 )
        {
        }

    public:
        bool commandValid;
        std::string command;
        int commandIndex;    // 命令在日志中的索引，标识该命令在日志中的位置
        bool SnapshotValid;  // 指示 Snapshot 字段是否包含一个有效的快照。
        std::string Snapshot;
        int SnapshotTerm;   // 快照的最后一个日志条目的任期
        int SnapshotIndex;  // 快照的最后一个日志条目的索引
    };
}  // namespace raftStoreDataBase